package controllers;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.text.DateFormat;
import java.text.SimpleDateFormat;
import java.util.ArrayList;
import java.util.Date;
import java.util.Iterator;
import java.util.Map.Entry;
import javax.swing.table.DefaultTableModel;
import models.Account;
import models.Bank;
import models.Person;
import models.SavingAccount;
import models.SpendingAccount;
import views.AdminFrame;
import views.MessageDialogs;
public class AdminFrameController {
private static AdminFrame frame = new AdminFrame();
private Bank bank = new Bank();
private SerializableManager manager = new SerializableManager();
public AdminFrameController() {
frame.setAddActionListener(new AddButtonActionListener());
frame.setDelButtonActionListener(new DeleteButtonActionListener());
frame.setAddHolderButtonActionListener(new AddHolderButtonActionListener());
frame.setDeleteHolderButtonActionListener(new DeleteHolderButtonActionListener());
frame.setReportsActionListener(new ReportsButtonActionListener());
this.bank.setContent(manager.deserializeBank().getContent());
Iterator<Entry<Person, ArrayList<Account>>> iterator = bank.getContent().entrySet().iterator();
while (iterator.hasNext()) {
Entry<Person, ArrayList<Account>> entry = iterator.next();
for (int i = 0; i < entry.getValue().size(); i++) {
Object[] row = { entry.getKey().getId(), entry.getKey().getName(), entry.getValue().get(i).getId(),
entry.getValue().get(i).getSum(), entry.getValue().get(i).getType(),
entry.getValue().get(i).getDate(), entry.getValue().get(i).getCloseDate() };
((DefaultTableModel) AdminFrame.getTable().getModel()).addRow(row);
}
Object[] row1 = { entry.getKey().getId(), entry.getKey().getName() };
((DefaultTableModel) AdminFrame.getRefTable().getModel()).addRow(row1);
}
}
public static void printTheAccount(Account a) {
Object[] row = { a.getP().getId(), a.getP().getName(), a.getId(), a.getSum(), a.getType(), a.getDate(),
a.getCloseDate() };
((DefaultTableModel) AdminFrame.getTable().getModel()).addRow(row);
}
public class AddButtonActionListener implements ActionListener {
@Override
public void actionPerformed(final ActionEvent e) {
String data[] = MessageDialogs.addAccountWindow();
Person p = new Person(Integer.parseInt(data[2]), data[0]);
DateFormat df = new SimpleDateFormat("dd/MM/yy");
Date dateobj = new Date();
String date = df.format(dateobj);
Account a = null;
if (data[1].equals("Spending Account")) {
a = new SpendingAccount(0.0, p, date, "Spending Account");
} else if (data[1].equals("Saving Account")) {
a = new SavingAccount(0.0, p, date, "Saving Account");
}
bank.addAccountToHolder(a, p);
printTheAccount(a);
manager.serializeBank(bank);
}
}
public class DeleteButtonActionListener implements ActionListener {
@Override
public void actionPerformed(final ActionEvent e) {
int viewIndex = AdminFrame.getTable().getSelectedRow();
if (viewIndex != -1) {
int id = Integer.parseInt(AdminFrame.getTable().getValueAt(viewIndex, 0).toString());
int accId = Integer.parseInt(AdminFrame.getTable().getValueAt(viewIndex, 2).toString());
Iterator<Entry<Person, ArrayList<Account>>> iterator = bank.getContent().entrySet().iterator();
while (iterator.hasNext()) {
Entry<Person, ArrayList<Account>> entry = iterator.next();
if (entry.getKey().getId() == id) {
for (int i = 0; i < entry.getValue().size(); i++) {
if (entry.getValue().get(i).getId() == accId)
bank.deleteAccountToHolder(entry.getValue().get(i), entry.getKey());
}
}
}
int modelIndex = AdminFrame.getTable().convertRowIndexToModel(viewIndex);
DefaultTableModel model = (DefaultTableModel) AdminFrame.getTable().getModel();
model.removeRow(modelIndex);
}
manager.serializeBank(bank);
}
}
public class AddHolderButtonActionListener implements ActionListener {
@Override
public void actionPerformed(final ActionEvent e) {
String data[] = MessageDialogs.addHolderWindow();
Person p = new Person(Integer.parseInt(data[1]), data[0]);
bank.addPerson(p);
Object[] row1 = { p.getId(), p.getName() };
((DefaultTableModel) AdminFrame.getRefTable().getModel()).addRow(row1);
manager.serializeBank(bank);
}
}
public class DeleteHolderButtonActionListener implements ActionListener {
@Override
public void actionPerformed(final ActionEvent e) {
int viewIndex = AdminFrame.getRefTable().getSelectedRow();
if (viewIndex != -1) {
int id = Integer.parseInt(AdminFrame.getRefTable().getValueAt(viewIndex, 0).toString());
String name = AdminFrame.getRefTable().getValueAt(viewIndex, 1).toString();
bank.deletePerson(new Person(id, name));
int modelIndex = AdminFrame.getRefTable().convertRowIndexToModel(viewIndex);
DefaultTableModel model = (DefaultTableModel) AdminFrame.getRefTable().getModel();
model.removeRow(modelIndex);
Iterator<Entry<Person, ArrayList<Account>>> iterator = bank.getContent().entrySet().iterator();
while (iterator.hasNext()) {
Entry<Person, ArrayList<Account>> entry = iterator.next();
System.out.println(entry.getKey().getName());
}
manager.serializeBank(bank);
}
}
}
public class ReportsButtonActionListener implements ActionListener {
@Override
public void actionPerformed(final ActionEvent e) {
bank.generateReports();
}
}
public static AdminFrame getFrame() {
return frame;
}
public static void setFrame(AdminFrame frame) {
AdminFrameController.frame = frame;
}
}